/* The file is saved in UTF-8 codepage.
 * Check: «Stereotype», Section mark-§, Copyright-©, Alpha-α, Beta-β, Smile-☺
 */
package cz.pecinovsky.english.lootp._125_;


import cz.pecinovsky.english.lootp._000_.Run;

import cz.pecinovsky.english.lootp.manager.IMoveable;
import cz.pecinovsky.english.lootp.manager.Mover;


import static   cz.pecinovsky.english.lootp.manager.CanvasManager_Envelope.             CanvasManager;

import static   cz.pecinovsky.english.lootp._125_.IModular_129_133.                    IModular;



////////////////////////////////////////////////////////////////////////////////
//%%+  +++++ End of ignored starting test - place for imports +++++
//%I+ =133c
//
//import správce.*;
//%I-
//%I+ >=133z
//
//import cz.pecinovsky.english.lootp.canvasmanager.IMoveable;
//import cz.pecinovsky.english.lootp.canvasmanager.Mover;
//import cz.pecinovsky.english.lootp.canvasmanager.CanvasManager;
//%I-
//%A+ >=133z

import cz.pecinovsky.english.lootp.utility.IO;
import cz.pecinovsky.english.lootp.utility.Position;
//%A-
//%X+ xxxxx Start of the ovejumped text with declaration of the envelope xxxxx
/*******************************************************************************
 *<pre>
 * Předchozí:   Není - toto_je_nově_definovaná_třída
 *              Ttt v projektu Ppp
 * Následující: Prozatím není
 *
 * Projekt  Ppp
 *   + Přidáno
 *   - Odebráno
 *   ~ Změněno
 *</pre>
 */
public class TestUtility_129_133
{    private TestUtility_129_133() {}   static
////////////////////////////////////////////////////////////////////////////////
//%X- ----- End of the ovejumped text with declaration of the envelope -----


/*******************************************************************************
 * Knihovní třída {@code TestUtility} obgsahuje sbírku pomocných metod
 * používaných testovacícmi třídami objektů implementujících rozhraní
 * {@link IModular}.
 *
 * @author Rudolf PECINOVSKÝ
 * @version 6.03.2017 — 2010-11-08
 */
public class TestUtility extends junit.framework.TestCase
{
//== CONSTANT CLASS ATTRIBUTES =================================================

    private static final CanvasManager CM = CanvasManager.getInstance();



//== VARIABLE CLASS ATTRIBUTES =================================================

    /** Position, na níž se bude přesouvat objekt testovaný v metodě
     *  {@link #positionSize(IModular)}. */
    private static Position pozice;

    /** Velikost menšího z modulů, které se budou nastavovat objektu
     *  testovanému v metodě {@link #positionSize(IModular)}. */
    private static int malýModul;

    /** Velikost většího z modulů, které se budou nastavovat objektu
     *  testovanému v metodě {@link #positionSize(IModular)}. */
    private static int velkýModul;



//== STATIC CONSTRUCTOR (CLASS INITIALIZER, STATIC INICITALIZING BLOCK) ======== 
//== CONSTANT INSTANCE ATTRIBUTES ==============================================
//== VARIABLE INSTANCE ATTRIBUTES ==============================================
//== CLASS GETTERS AND SETTERS =================================================

    /***************************************************************************
     * Vyzkouší změny pozice a velikosti zadaného objektu;
     * parametry testu je třeba předem nastavit pomocí metody
     *
     * @param pozice    Position, na kterou se testovaný objekt přesune
     * @param small      Malá velikost modulu, jež se testovanému objektu zadá
     * @param big     Velká velikost modulu, jež se testovanému objektu zadá
     */
    public static void setPoziceModuly(Position pozice, int small, int big)
    {
        TestUtility.pozice = pozice;
        malýModul  = small;
        velkýModul = big;
    }



//== OTHER NON-PRIVATE CLASS METHODS ===========================================

    /***************************************************************************
     * Vyzkouší změny pozice a velikosti zadaného objektu;
     * parametry testu je třeba předem nastavit pomocí metody
     *
     * @param objekt Testovaný objekt
     */
    public static void positionSize(IModular objekt)
    {
        positionSize(objekt, pozice, malýModul, velkýModul);
    }


    /***************************************************************************
     * Vyzkouší změny pozice a velikosti zadaného objektu s použitím
     * zadaných parametrů.
     *
     * @param objekt    Testovaný objekt
     * @param pozice    Position, na kterou se testovaný objekt přesune
     * @param small      Malá velikost modulu, jež se testovanému objektu zadá
     * @param big     Velká velikost modulu, jež se testovanému objektu zadá
     */
    public static void positionSize(IModular objekt,
                                      Position pozice, int small, int big)
    {
        final int ms = 500;
        objekt.setPosition(pozice.x, pozice.y);
        IO.pause(ms);
        objekt.setModule(big);
        IO.pause(ms);
        objekt.setModule(small);
        IO.pause(ms);
        CM.remove(objekt);
        IO.pause(ms);
    }


    /***************************************************************************
     * Prohodí pozice zadaných objektů a nechá zkontrolovat,
     * zda si objekty své pozice doopravdy vyměnily.
     *
     * @param o1 První objekt
     * @param o2 Druhý objekt
     */
    public static void swapPositionsWithCheck(IMoveable o1, IMoveable o2)
    {
        Mover mover = new Mover(10);
        Position p1 = o1.getPosition();
        Position p2 = o2.getPosition();

        System.out.println("Výchozí: " + p1 + " <--> " + p2);

        mover.moveTo(p2, o1);
        mover.moveTo(p1, o2);

        System.out.println("Cílová:  " + o1.getPosition() +
                              " <--> " + o2.getPosition() + "\n");

        assertEquals(p1, o2.getPosition());
        assertEquals(p2, o1.getPosition());
    }



//##############################################################################
//== CONSTUCTORS AND FACTORY METHODS ===========================================

    /** Soukromý konstruktor brání vytvoření instancí. */
    private TestUtility(String name) {}

//== PREPARATION AND CLEANING THE FIXTURE ======================================
//== PRIVATE AND AUXILIARY CLASS METHODS =======================================
//== PRIVATE AND AUXILIARY INSTANCE METHODS ====================================
//== EMBEDDED TYPES AND INNER CLASSES ==========================================
//== THE TESTS =================================================================
//
//     /***************************************************************************
//      *
//      */
//     public void testXXX()
//     {
//     }
}

//%%- ---- Start of the ovejumped text with closing of the envelope ----
////////////////////////////////////////////////////////////////////////////////
//%X+ <xxx
//%X-
//%I+ <xxx
//%I-
//== TESTING CLASSES AND METHODS ===============================================
//Není-li třída testovací, následující dvě metody se smažou
//%X+   Metoda připravená k vložení do testovacích tříd
     /** */
     public void testFixture() {}
//%X-


    /***************************************************************************
     * Třída, jejíž instance má na starosti úklid mezi jednotlivými testy,
     * který není možno zakomponovat do metody {@code tearDown()},
     * dokud nebudou studenti umět programovat.
     */
    private static class TearDown implements Run.ITD
    {
        /** {@inheritDoc} */
        @Override
        public void cleanUp()
        {
//            Canvas.clearCanvas();
//            CanvasManager.getInstance().removeAll();
        }
    }


    /***************************************************************************
     * Test method.
     */
    public static void test()
    {
////Nejedná-li se o testovací třídu, celý blok lze smazat
//        junit.textui.TestRunner.run(suite());
//        junit.textui.TestRunner.run(new Třída("test"));
//        Run.tests(Test.class,
//                new TearDown(),
//                "testFixture",
//                "");
        System.exit(0);
    }
    /** @param args Parametry příkazového řádku - nepoužívané. */
    public static void main(String[] args)  {  test();  }
}
